package tech.aistar.design.proxy.demo2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * 本类用来演示: 动态代理
 *
 * @author: success
 * @date: 2022/8/4 3:10 下午
 */
public class ProxyHandler implements InvocationHandler {

    //代理一切接口
    private Object obj;

    public ProxyHandler(Object obj){
        this.obj = obj;
    }

    /**
     *
     *
     * @param proxy 反射创建的代理对象
     * @param method 代理对象访问的接口的中的方法对应的method实例
     * @param args 如果参数,调用方法传入的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //System.out.println(proxy.getClass());
        //
        //System.out.println(method);
        //
        //System.out.println(Arrays.toString(args));

        //在此处统一进行功能的扩展
        System.out.println("log-before");

        //调用目标对象的核心方法
        Object result = method.invoke(obj,args);

        System.out.println("log-after");

        return result;
    }
}
